package finalapp.exercise.util;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapController;

import finalapp.exercise.R;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Esta utility class se encarga de gestionar los eventos de usuario relacionado con la activity
 * que muestra el mapa
 * 
 * @author Alejandro Villamarin
 *
 */
public class CustomLocationListener implements LocationListener{
	
	/**
	 * Contexto de la aplicacion
	 */
	private Activity contexto;
	
	/**
	 * MapController para gestionar los eventos
	 */
	private MapController controlador;

	/**
	 * Constructor
	 * 
	 * @param c		Activity pasada		
	 * @param cl	El MapController que usaremos para gestionar los eventos	
	 */
	public CustomLocationListener(Activity c, MapController cl) {
		contexto = c;
		controlador = cl;
	}
	
	/**
	 * Metodo que se encarga de gestionar el cambio de location en el mapa
	 * @param	location	La nueva location en el mapa
	 */
	@Override
	public void onLocationChanged(Location location) {
		//Obtenemos el GeoPoint asociado a la location y centramos el mapa en el nuevo punto
		GeoPoint nuevo = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));
		controlador.animateTo(nuevo);
	}

	/**
	 * Metodo que muestra un mensaje cuando se activa el GPS
	 * @param	provider	String con el nombre del provider
	 */
	@Override
	public void onProviderDisabled(String provider) {
		mostrarToastDesactivacion("Provider GPS desactivado");
	}

	/**
	 * Metodo que muestra un mensaje cuando se desactiva el GPS
	 * @param	provider	String con el nombre del provider
	 */
	@Override
	public void onProviderEnabled(String provider) {
		mostrarToastActivacion("Provider GPS activado");
	}

	/**
	 * Metodo que se encarga de gestionar los cambios de estado en el proveedor GPS
	 * @param	provider	String con el nombre del provider
	 * @param	status		Integer que indica el estado del provider
	 * @param 	extras		Bundle que contiene datos extra asociados al provider
	 * @return	None
	 */
	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
		//no hacemos nada
		
	}
	
	/**
	 * Metodo que muestra un toast personalizado de activacion
	 * @param mensaje	El mensaje a mostrar
	 */
	public void mostrarToastActivacion(String mensaje){
		// Cargamos la vista personalizada
		ViewGroup vistaRaiz = (ViewGroup) contexto.findViewById(R.id.toastConfirmacionRaiz);
		LayoutInflater inflater = contexto.getLayoutInflater();
		View layout = inflater.inflate(R.layout.confirmacion_toast, vistaRaiz);
		// Cambiamos el texto (buscamos el label y lo modificamos)
		TextView texto = (TextView) layout.findViewById(R.id.textoConfirmacion);
		texto.setText(mensaje);
		// Creamos el toast y le asignamos la vista que hemos personalizado
		Toast toast = new Toast(contexto);
		//añadimos el layout al toast
		toast.setView(layout);
		// Lo centramos en pantalla
		toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0,0);
		// Permanecerá más rato en pantalla
		toast.setDuration(2);
		// Lo mostramos
		//toast.show();

	}
	  
	  
	/**
	 * Metodo que muestra un toast personalizado de desactivacion
	 * @param mensaje	El mensaje a mostrar
	 */
	public void mostrarToastDesactivacion(String mensaje){
		// Cargamos la vista personalizada
		ViewGroup vistaRaiz = (ViewGroup) contexto.findViewById(R.id.toastErrorRaiz);
		LayoutInflater inflater = contexto.getLayoutInflater();
		View layout = inflater.inflate(R.layout.error_toast, vistaRaiz);
		// Cambiamos el texto (buscamos el label y lo modificamos)
		TextView texto = (TextView) layout.findViewById(R.id.textoError);
		texto.setText(mensaje);
		// Creamos el toast y le asignamos la vista que hemos personalizado
		Toast toast = new Toast(contexto.getApplicationContext());
		//añadimos el layout al toast
		toast.setView(layout);
		// Lo centramos en pantalla
		toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0,0);
		// Permanecerá más rato en pantalla
		toast.setDuration(2);
		// Lo mostramos
		//toast.show();
		  
	}

}
